记录一次使用fastjson把json字符串转为对象时属性缺失问题

您所在的位置:网站首页 fastjson string转json对象 记录一次使用fastjson把json字符串转为对象时属性缺失问题

记录一次使用fastjson把json字符串转为对象时属性缺失问题

2023-10-28 19:34| 来源: 网络整理| 查看: 265

记录一次使用fastjson把json字符串转为对象时属性缺失问题 一、问题现象1 使用到的POJO:2 复现步骤 二、问题原因三、解决办法四、源码追踪     在一次使用fastJson把json字符串转为对象时,发现有个属性缺失,经多方百度才得问题原因,现将问题原因及解决步骤记录如下:

一、问题现象

    问题复现步骤如下

1 使用到的POJO: public class SysUser { private String userName; private String password; private String job; private String gender = "Unknown"; public SysUser(String userName, String password, String job) { this.userName = userName; this.password = password; this.job = job; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "SysUser{" + "userName='" + userName + '\'' + ", password='" + password + '\'' + ", job='" + job + '\'' + ", gender='" + gender + '\'' + '}'; } } 2 复现步骤 public static void main(String[] args) { SysUser sysUser = new SysUser("大王", "大王", "王者"); sysUser.setGender("男"); String jsonString = JSON.toJSONString(sysUser); SysUser userObject = JSON.parseObject(jsonString, SysUser.class); System.out.println(userObject); }

   debug查看上述代码的执行结果如下图,由执行结果可看到,我给sysUser变量的字段gender赋值了"男",由sysUser转换成的jsonString中的字段gender值也是男,但是使用

JSON.parseObject(jsonString, SysUser.class);

   把字符串转为SysUser对象时,gender属性仍然为默认值“Unknown”,也就是说并没有把sonString中的字段值赋予SysUser对象的gender变量: 在这里插入图片描述

二、问题原因

  此问题困惑了我挺久,网查此问题大部分都是缺少字段的set方法或者属性名有问题导致的。由于根本原因的查找未涉及源码追究,暂不表。   直接说结论,结论就是,此pojo有四个属性,但是唯一的一个构造方法只包括了其中三个属性,导致另外一个属性在进行字符串转对象时,无法赋值(我一直以为只要有字段属性的get和set方法,fastJson转换时就会把值赋予给相应字段,原来并不是如此)。

三、解决办法

解决方法很简单,可用如下两个方式:  1:增加全参数构造器  2:增加无参构造器

四、源码追踪

暂略。。。。。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3